<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>组合继承</title>
</head>
<body>
<script>
    /*
   * 继承 子类继承父类的属性和方法
   * 目的 可以让子类的 实例 能够使用父类的属性和方法
   *   父类 A
   *   子类 B
   * */
    //类 ==> 构造函数


    //组合继承
    //结合原型链继承和借用构造函数继承组合起来实现的继承

    /*
    * 特点:
    * (call继承)
    *   1.子类实例可以使用父类私有的属性和方法
    *   2.父类私有的属性和方法都会变成子类实例私有的属性和方法
    * (原型链继承)
    *   3.子类实例可以通过原型链访问和使用父类公有的属性和方法
    *   4.子类的原型链上会存在一份多余的父类的私有属性和方法
    * */

    //父类
    function A(x) {
        this.x = x;
        this.seyHello = function () {
            console.log("hello world");
        }
    }

    A.prototype.getX = function () {
        console.log(this.x);
    }

    //子类
    function B(y, x) {
        this.y = y;
        A.call(this, x);
    }

    B.prototype = new A();
    B.prototype.constructor = B;
    B.prototype.getY = function () {
        console.log(this.y);
    }

    let b = new B(200, 100);
    console.log(b);
</script>
</body>
</html>